import { ResponseEnums, API_PREFIX, API_URL } from "./config";
/**
 * @Description 路径拼接
 * @param {String} ...paths
 * @returns {String}
 */

export function joinPath(...paths) {
  // 使用 reduce 遍历所有路径部分，并进行拼接处理
  return paths
    .reduce((acc, part) => {
      if (part) {
        // 去除每个部分开头和结尾的斜杠
        const cleanedPart = part.replace(/^\/+|\/+$/g, "");
        // 拼接部分路径，并确保中间有一个斜杠
        if (cleanedPart) {
          return `${acc}/${cleanedPart}`;
        }
      }
      return acc;
    }, "")
    .replace(/^\/+/, "/"); // 确保最终路径以单个斜杠开头
}

/**
 * @Description 路径拼接 作用为 在一下api文件里 自定义前缀
 * 使用方法 通过 new PathBuilder(前缀).build()生成默认前缀
 * 使用方法 通过 new PathBuilder(前缀).setBase(自定义前缀).build()
 * 添加的默认的 根前缀 描述为 可能不同人的开发 或者公共接口 的前缀不同使用此方法
 *
 * @author yx
 * @date 2024-07-11 10:04:42
 */

export class PathBuilder {
  base = "";
  url = API_URL;

  // base 是基础路径 最基本的前缀
  constructor(prefix) {
    // 默认值为 可能不同人的开发 或者公共接口 的前缀
    this.setBase(API_PREFIX);
    this.setPrefix(prefix);
  }
  // 定义设置基础路径的方法 设置接口的根前缀
  setBase(base) {
    this.base = base;
  }
  // 设置当前页的接口前缀
  setPrefix(prefix) {
    this.base = joinPath(this.base, prefix);
  }

  // 定义拼接路径的方法
  build(...paths) {
    return joinPath(this.base, ...paths);
  }
}

/**
 * @Description 自定义的事件处理 接口返回后处理状态
 * @author xx
 * @date 2024-07-11 10:24:26
 */

export const handleStatus = (response) => {
  if (
    response &&
    (response.code == ResponseEnums.SUCCESS || response.code == 200)
  ) {
    return response.data;
  }

  return Promise.reject(response?.message || handleStatus.msg || "fail");
};
handleStatus.msg = "响应失败~~~";
